package org.jeecg.cn.edu.scau.vm.node.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.cn.edu.scau.vm.node.domain.*;
import org.jeecg.cn.edu.scau.vm.node.enums.NodeStatusEnum;
import org.jeecg.cn.edu.scau.vm.node.vo.*;
import org.jeecg.common.api.vo.Result;

import java.util.List;

public interface NodeService extends IService<VmNode> {
    /**
     * 基于权重轮循均衡算法,选择最优的节点,返回最优节点的ID
     *
     * @return 节点ID
     */
    VmNode selectNode();

    /**
     * 初始化节点信息
     *
     * @return 返回初始化后的消息
     */
    Result<String> initNode(VmNode vmNode);

    /**
     * 获取节点信息
     *
     * @param nodeId 节点UUID
     * @return 返回节点基本信息
     */
    VmNode getNodeByNodeId(String nodeId);

    IPage<VmNodeListVo> pageList(Page<VmNode> page, QueryWrapper<VmNode> queryWrapper);

    /**
     * 获取节点当前状态值
     *
     * @param nodeId 节点ID
     * @return 枚举值
     */
    NodeStatusEnum getNodeStatus(String nodeId);

    /**
     * 初始化节点的另一种重载
     *
     * @param id 节点id
     * @return 返回相关数据
     */
    Result<String> initNode(String id);

    Result<String> saveNode(VmNode vmNode);

    Result<VmNodeBasicData> getLoadDataById(String id);

    List<DisksInfo> getDiskInfoByNodeId(String id);

    List<NetworkInfo> getNetworkInfoByNodeId(String id);

    OSInfo getOSInfoByNodeId(String id);

    OSRuntimeInfo getOSRuntimeInfoByNodeId(String id);

    Result<List<VmNodeCpuChartVo>> getCpuDataById(String id);

    Result<List<VmNodeRamChartVo>> getRamDataById(String id);

    Result<List<VmNodeDiskChartVo>> getDiskDataById(String id);

}
